package org.cwx.db;

import java.util.List;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp2.BasicDataSourceFactory;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.cwx.action.PerinfoAction;
import org.cwx.utils.MyUtils;

import com.mchange.v2.c3p0.ComboPooledDataSource;

/**
 * 单例模式实现数据源
 * 
 * @author Administrator
 *
 */
public class DBCPDataSource {
	// 1、定义一个单例模式的静态变量
	private static ComboPooledDataSource ds = null;

	// 2、构造方法私有化
	private DBCPDataSource() {
	}

	// 3、提供一个静态的全局的访问入口【没有进行多线程同步处理】
	public static DataSource getDataSource() {
		// 是否第一次访问，并进行初始化
		if (ds == null) {
			try {
				// 使用Properties读取配置信息
//				Properties prop = new Properties();
//				// 加载配置信息
//				prop.load(DBCPDataSource.class.getClassLoader().getResourceAsStream("db.properties"));
//				// 使用工厂类初始化数据源
//				ds = BasicDataSourceFactory.createDataSource(prop);
				ds = new ComboPooledDataSource("c3p0-config.xml");
			} catch (Exception e) {
				// dbcp数据源初始化异常
				System.out.println("dbcp数据源初始化异常:" + e.getMessage());
//				e.printStackTrace();
			}
		}
		return ds;
	}

	public static void main(String[] args) {		
		// 查询sql语句
		String strSql = "select * from ADMININFO";
		// 进行查询操作
		List<PerinfoAction> lst = MyUtils.getInstance(DBProvider.class).query(strSql, new BeanListHandler<PerinfoAction>(PerinfoAction.class));
		// 遍历查询结果
		if (lst != null && lst.size() > 0) {
			for (PerinfoAction adminInfoBean : lst) {
				System.out.println(adminInfoBean.toString());
			}
		}
	}
}


